package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * JDBC [Java DataBase Connectivity]  JAVA数据库连接
 * JDBC是SUN提供的一套API接口，使用JAVA连接数据库的一套标准接口。
 * 各个数据库提供上都提供了一套JDBC的实现类用于连接自家的DBMS。而提供的这一套
 * 实现类也称为连接该DBMS的驱动(Driver)
 *
 * 1:要加载需要操作的DBMS厂商提供的驱动(MAVEN直接加载依赖)
 * 2:基于标准的JDBC操作流程操作该数据库
 */
public class JDBCDemo1 {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        /*
            JDBC连接DBMS的标准流程
            1:加载驱动:Class.forName("不同数据库厂商提供的Driver类")
            2:与数据库建立连接:DriverManager.getConnection()
            3:通过Connection对象创建用于执行SQL语句的Statement对象
            4:通过Statement执行SQ语句
            5:如果执行的是DQL，则可以遍历查询结果集
         */
        //1 JDBC中Driver接口的实现类不同数据库厂商提供的的包名与类名不相同
        Class.forName("com.mysql.cj.jdbc.Driver");//mysql固定就是这个

        //2
        /*
            DriverManager.getConnection()方法需要传入三个参数
            1:连接数据库的路径(不同的数据库路径格式不完全相同)
            2:连接数据库的用户名
            3:连接数据库的密码
            该方法返回值为一个Connection的实例(Connection是一个接口，是
            JDBC中的一个核心接口，用于表示一个与数据库的连接。不同的数据库
            厂商在驱动包里提供了对应的实现类)
         */
        //URL格式-> jdbc:不同数据库有自己格式的部分/数据库名?参数
        Connection connection = DriverManager.getConnection(
//                                      数据库名，相当于USE tedu
//                                              ||||
//                                              VVVV
                "jdbc:mysql://localhost:3306/tedu?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true",
                "root",
                "root");
        System.out.println("数据库连接成功!");
        /*
            通过Connection获取用于执行SQL语句的执行对象Statement
            Statement对象的作用就是向数据库执行指定的SQL语句。
         */
        Statement state = connection.createStatement();
        /*
            创建一张表userinfo
            字段:id,username,password,nickname,age
         */
        String sql = "CREATE TABLE userinfo(" +
                "       id INT AUTO_INCREMENT PRIMARY KEY," +
                "       username VARCHAR(30)," +
                "       password VARCHAR(30)," +
                "       nickname VARCHAR(30)," +
                "       age INT(3)" +
                ")";
        /*
            boolean execute(String sql)
            该方法可以执行任意分类的SQL语句。但是DML和DQL都有专门的方法
            用于执行，因此该方法一般用于指定DDL语句(CREATE,ALTER,DROP)

            该方法返回值为true表达该SQL执行后有查询结果集。
         */
        state.execute(sql);
        System.out.println("SQL执行完毕");
    }
}




